﻿package igz.fleaxy.air 
{
	import igz.fleaxy.events.CommEvent;
	import igz.fleaxy.Fleaxy;
	import igz.fleaxy.net.Comm;
	
	/**
	 * @author Intelygenz | www.intelygenz.com
	 */
	public class UpdateManager {
		
		static public function get $APP_ID():String {
			return AirConfigurationManager.$Current.$AppId;
		}

		static public function get $APP_VERSION():String {
			return AirConfigurationManager.$Current.$AppVersion;
		}
		
		public function UpdateManager() {
			
		}
		
		/**
		 * Comprueba si existen actualizaciones del widget. Para ello se tiene que especificar en 
		 * el config.xml la uri del archivo XML que indica la última versión del widget, por ejemplo:
		 * 
		 * <CONFIGURATION>
		 * 	<SYSTEM>
		 *		<WIDGET_UPDATE>
		 * 			<URI dev='http://debi:29024/widget_update.xml' int='' pro='http://www.kumon-intranet.es/widget_update.xml' />
		 *		</WIDGET_UPDATE>
		 * 	</SYSTEM>
		 * </CONFIGURATION>
		 * 
		 * IMPORTANTE: La uri que elija dependerá del entorno en el que nos encontremos: <SYSTEM><ENVIRONMENT><DEFAULT value='DEV' /></ENVIRONMENT></SYSTEM>  
		 * 
		 * Este archivo tiene que contener la última versión disponible y la uri de descarga, de la siguiente forma:
		 *
		 * <?xml version="1.0" encoding="utf-8"?>
		 * <widget_update>
		 *	<widget>
		 *		<id>igz-ku03-gestor-acciones</id>
		 *		<version>0.7</version>
		 *		<uri>./kumon_gestor_de_acciones.air</uri>
		 *	</widget>
		 * </widget_update>
		 * 
		 * IMPORTANTE: Si la uri es relativa como en el ejemplo, el fichero air tiene que estar en el mismo directorio que el fichero xml.
		 * 
		 * El id y la versión actual del widget se especifica en el application.xml:
		 * 
		 * <application xmlns="http://ns.adobe.com/air/application/1.5">
		 * 		<id>igz-ku03-gestor-acciones</id>
		 * 		<version>0.6</version>
		 * </application>
		 * 
		 * @param	f_onUpdates Función a la que se llama cuando existe una actualización disponible.
		 * 						Recibe como parámetro un objeto del siguiente tipo:
		 * 							{ version: 0.7
		 * 							, uri: "http://debi:29024/Kumon_Gestor_de_acciones.air"
		 * 							}
		 * 
		 * @example
		 * 	
		 * UpdateManager.$CheckUpdates( _OnNewUpdate );
		 * 
		 *	private function _OnNewUpdate(p_update:Object):void {
		 *		trace("Nueva actualizacion disponible: uri["+p_update.uri+"] version["+p_update.version+"]");
		 * 		Comm.$NavigateToURL( p_update.uri );
		 *	}
		 * 
		 */
		static public function $CheckUpdates( f_onUpdates:Function ):void {
			Comm.$Get( Fleaxy.$Current.$ConfigurationManager.$WidgetUpdateUri
					, { "onComplete" : _CheckUpdates_onComplete, "onCompleteParams" : { "f_onUpdates":f_onUpdates } }
					);

		}
		
		static private function _CheckUpdates_onComplete( p_commEvent:CommEvent ):void {
			var responseXML : XMLList = p_commEvent.$ResponseXML.widget.(id == AirConfigurationManager.$Current.$AppId);
			var lastVersion : Number = responseXML.version;
			var updateUri   : String = responseXML.uri;

			if ( updateUri.indexOf("http") != 0 && updateUri.indexOf("./") == 0 ) {
				var xmlUpdateUri:String = Fleaxy.$Current.$ConfigurationManager.$WidgetUpdateUri;
				updateUri = xmlUpdateUri.substring(0, xmlUpdateUri.lastIndexOf("/")) + updateUri.replace(".","");
			}

			if ( lastVersion > parseFloat(AirConfigurationManager.$Current.$AppVersion) ) {
				p_commEvent.$Params["f_onUpdates"]( { "version": lastVersion, "uri": updateUri  } );
			}
		}
	}
	
}